 // 栈
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        if(pre.empty() && vin.empty()) return NULL;
        // 创建根节点
        TreeNode* root = new TreeNode(pre[0]);
        stack<TreeNode*> s;
        TreeNode* cur = root;
        for(size_t i = 1,j = 0; i < pre.size(); ++i){
            // 是左孩子
            if(cur->val != vin[j]){
                cur->left = new TreeNode(pre[i]);
                s.push(cur);
                cur = cur->left;
            }
            else{
                ++j;
                // 回退
                while(!s.empty() && s.top()->val == vin[j]){
                    cur = s.top();
                    s.pop();
                    ++j;
                }
                cur->right = new TreeNode(pre[i]);
                cur = cur->right;
            }
        }
        return root;
    }